package com.agile.leetcode.middle.translateNum;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。
 * <p>
 * <p>
 * <p>
 * 示例 1:
 * <p>
 * 输入: 12258
 * 输出: 5
 * 解释: 12258有5种不同的翻译，分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @Author KD
 * @Date 2021/3/10 9:23
 */
public class TranslateNum {
    public static void main(String[] args) {
        TranslateNum translateNum = new TranslateNum();
        //
        int i = translateNum.translateNum_1(12258);
        System.out.println(i);
    }

    public int translateNum(int num) {
        // 转为字符串
        String numStr = num + "";
        // 拿到长度
        int length = numStr.length();
        // 创建数组
        int[] numArray = new int[length];
        // 数组赋值
        for (int i = numArray.length - 1; i >= 0; i++) {
            int temp = num % 10;
            num = num / 10;
            numArray[i] = temp;
        }
        char[] chars = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
                , 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
        // 遍历数组
        // 创建集合
        Set<String> set = new HashSet<>();
        StringBuilder builder = new StringBuilder();
        Map<Integer, String> map = new HashMap(16);
        int k = 0;
        int j = 0;
        char tempPre;
        char tempNext;
        for (int i = 0; i < numArray.length; i++) {
            // 得到字母
            char temp = chars[i];
            k = i - 1;
            if (k >= 0 && k < numArray.length) {
                // 拿到值
                int tempNum = k * 10 + i;
                // 是否在25以下
                if (tempNum < chars.length) {
                    tempPre = chars[tempNum];
                }
            }
            j = i + 1;
            if (j < numArray.length) {
                int tempNum = i * 10 + j;
                if (tempNum < chars.length) {
                    tempNext = chars[tempNum];
                }
            }
        }
        return 0;
    }

    /**
     * @param num
     * @return
     */
    public int translateNum_1(int num) {
        if (num <= 9) return 1;
        // 拿到输入数字的余数
        int mod = num % 100;
        // 如果小于9或大于26时，只能按两位数进行计算
        if (mod <= 9 || mod >= 26) {
            return translateNum_1(num / 10);
        } else {
            // [9 26]之间，可以当做两个字母，也可以是一个字母
            return translateNum_1(num / 10) + translateNum_1(num / 100);
        }

    }
}
